import glob
import pandas as pd
import oracledb as ora
# from MyConfig import MyConfig

def handler(row:pd.Series,cursor:ora.Cursor)->pd.Series:
    try:
        sql = "select nvl(max(m.scp_product_name),'нет') from scm_fact.product_map_sap_scp m where m.sap_product_code=:NOM"
        cursor.execute(sql,[row["ID в SAP ERP VMZ"]])
        record = cursor.fetchone()
        row["Продукт УП"]=str(record[0])
        print(f"{row['ID в SAP ERP VMZ']} -> {record[0]}")
        return row
    except Exception as exp:
        print(f"ora error: {exp}")
        row["Продукт УП"] = f"ora error: {exp}"
        return row

if __name__=="__main__":
    connection:ora.Connection = None
    cursor:ora.Cursor = None
    path_pattern="D:\\work\\Укрупнение\\current\\pyExcelCons3\\msa\\*.xlsx"
    dump_path = "D:\\work\\Укрупнение\\current\\pyExcelCons3\\misc\\full_dump.xlsx"
    config = "D:\\work\\Укрупнение\\current\\pyExcelCons3\\config.json"
    try:
        # consCfg = MyConfig(config)
        columns = [
                "ID в SAP ERP VMZ",
                "Вид материала в SAP ERP",
                "Полное наименование материала",
                "Производство",
                "№ чертежа <Производство>",
                "Вакуумирование <Производство>",
                "Группа труб * <Производство>",
                "Диаметр ступицы, мм <Производство>",
                "Диаметр, мм <Производство>",
                "Длина листа, мм <Производство>",
                "Длина раската, мм <Производство>",
                "Длина раскроя, мм <Производство>",
                "Исходная заготовка <Производство>",
                "Категория <Производство>",
                "Класс прочности <Производство>",
                "Класс прочности <Корпоративный классификатор>",
                "Код СКМТР <Производство>",
                "Марка стали <Производство>",
                "Марка стали* <Корпоративный классификатор>",
                "Муфта с узлом уплотнения <Производство>",
                "Муфта специальная <Производство>",
                "Номер калибровки колеса <Производство>",
                "НТД внутреннего покрытия <Производство>",
                "НТД геометрии <Производство>",
                "НТД качества (трубы стальные) <Производство>",
                "НТД наружного покрытия <Производство>",
                "НТД Химического состава <Производство>",
                "Размер профиля 1, мм <Производство>",
                "Размер профиля 2, мм <Производство>",
                "Теоретический вес колеса после ТО, кг <Производство>",
                "Теоретический вес колеса, кг <Производство>",
                "Теоретический вес колесной заготовки, кг <Производство>",
                "Теоретический вес чернового колеса, кг <Производство>",
                "Термообработка <Производство>",
                "Тип покрытия муфты <Производство>",
                "Тип резьбы <Производство>",
                "Тип трубы <Производство>",
                "Типоразмер изложницы <Производство>",
                "Толщина материнского сляба, мм <Производство>",
                "Толщина, мм <Корпоративный классификатор>",
                "Толщина покрытия, мм <Производство>",
                "Толщина стенки заготовки, мм <Производство>",
                "Толщина, мм <Производство>",
                "Уровень исполнения * <Производство>",
                "Характер кромки <Производство>",
                "Ширина листа (штрипса), мм <Производство>",
                "Ширина материнского сляба, мм <Производство>",
                "Ширина сляба, мм <Корпоративный классификатор>",
                "Ширина рулона, мм <Производство>",
                "Ширина штрипса, мм <Производство>",
                "НТД наружного покрытия 2 <Производство>",
                "Тип покрытия 2 <Производство>",
                "Толщина раската, мм <Производство>",
                "Ширина раската, мм <Производство>",
                "Контракт, спецификация <Производство>",
                "НТД качества (колеса) <Производство>",
                "НТД качества (прокат) <Производство>",
                "НТД качества (слитки стальные) <Корпоративный классификатор>",
                "Покраска <Производство>",
                "Тип покрытия <Производство>",
                "Толщина стенки, мм <Производство>"
        ]
        ora.init_oracle_client(lib_dir=".\\ora")
        connection = ora.connect(dsn="172.17.80.116/scpora",user="manage_dw",password="ufyjwhb")
        cursor:ora.Cursor = connection.cursor()
        print(f"connect to oracle: {connection.version}")
        
        files=[f for f in glob.glob(path_pattern)]
        dfs=[]
        for f in files:
            print(f"load file: {f}")
            xl = pd.ExcelFile(f)
            for sheet_name in xl.sheet_names:
                df=xl.parse(sheet_name=sheet_name)
                print(f"\tread sheet [{sheet_name}]")
                dfs.append(df)
            print("file done")
        dumpDf = pd.concat(dfs)
        dumpDf = dumpDf[columns]
        print("concated")
        dumpDf = dumpDf.apply(lambda row: handler(row,cursor), axis=1)
        print("df handled")        
        dumpDf.to_excel(dump_path,index=False)
        print(f"dump '{dump_path}' saved")
    except Exception as exp:
        print(f"general error: {exp}")
    finally:
        if cursor is not None: cursor.close()
        if connection is not None: connection.close()
        print("oracle disconnected")